/**
 * 测试不同排序函数；
 * @author: sundx
 * @date: 2020-05-29 20:19:16
 * @Last Modified by: sundx
 * @Last Modified time: 2020-06-10 14:25:33
 */
#include "SortTestHelper.h"
#include "sort.h"

int main() {
  int n = 1000000; // 数据总数
  // [0,10]区间，有大量重复数据；
  int *arr = SortTestHelper::generateRandomArray(n, 0, 10); // [0,10]区间，
  // int *arr = SortTestHelper::generateNearlySortedArray(n, 100);
  // int *arr = SortTestHelper::generateNearlySortedArray(n, 0, 10, 100);
  int *arr2 = SortTestHelper::copyIntArray(arr, n);
  int *arr3 = SortTestHelper::copyIntArray(arr, n);
  int *arr4 = SortTestHelper::copyIntArray(arr, n);
  int *arr5 = SortTestHelper::copyIntArray(arr, n);
  int *arr6 = SortTestHelper::copyIntArray(arr, n);
  int *arr7 = SortTestHelper::copyIntArray(arr, n);
  int *arr8 = SortTestHelper::copyIntArray(arr, n);

  // SortTestHelper::sortInfo("选择排序", selectionSort, arr, n);
  // SortTestHelper::sortInfo("插入排序", insertionSort, arr2, n);
  // SortTestHelper::sortInfo("插入排序1", insertionSort2, arr3, n);
  SortTestHelper::sortInfo("归并排序", mergeSort, arr4, n);
  SortTestHelper::sortInfo("归并排序自底而上", mergeSortBU, arr5, n);
  SortTestHelper::sortInfo("快速排序第一版", quickSort1, arr6, n);
  SortTestHelper::sortInfo("快速排序第二版", quickSort2, arr7, n);
  SortTestHelper::sortInfo("快速排序迷", quickSort3, arr8, n);

  delete[] arr;
  delete[] arr2;
  delete[] arr3;
  delete[] arr4;
  delete[] arr5;
  delete[] arr6;
  delete[] arr7;
  delete[] arr8;

  return 0;
}
